<!DOCTYPE HTML>
<html>
<head>
<title>{...} (区块) | AutoHotkey</title>
<meta name="description" content="Blocks are one or more statements enclosed in braces. Typically used with function definitions and control flow statements." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>{...} (区块)</h1>
<p>块是用大括号括起来的一个或多个<a href="../Concepts.htm#statement">语句</a>. 通常与<a href="../Functions.htm#define">函数定义</a>和<a href="../Language.htm#control-flow">控制流语句</a>一起使用.</p>

<pre class="Syntax">
{
    <i>语句</i>
}</pre>

<h2 id="Remarks">备注</h2>
<p>区块用于将两行或多行<a href="../Concepts.htm#statement">语句</a>绑定在一起. 它还可以用来改变 <a href="Else.htm">Else 语句</a>从属于哪个 <a href="../Language.htm#if-statement">If 语句</a>, 例如在此例中, 区块强制 Else 语句从属于第一个 If 语句, 而不是第二个:</p>
<pre>if (Var1 = 1)
{
    if (Var2 = "abc")
        Sleep, 1
}
else
    return</pre>
<p>尽管区块可以用在脚本中的任何位置, 不过目前它们仅在与<a href="../Functions.htm#define">函数定义</a>, <a href="../Language.htm#if-statement">If 语句</a>, <a href="Else.htm">Else</a>, <a href="../Language.htm#loop-statement">Loop 语句</a>, <a href="Try.htm">Try</a>, <a href="Catch.htm">Catch</a> 或 <a href="Finally.htm">Finally</a> 一起使用时才有意义.</p>
<p>如果上面提到的任何控制流语句中仅含单行语句, 那么该语句可以不需要括在区块中(这对于函数定义不适用). 不过, 在某些情况下, 这样做可能会增强脚本的可读性和可维护性.</p>
<p>区块中可以为空(不含任何语句), 当您想注释区块中的内容而不移除区块时这很有用.</p>
<p id="otb"><strong>One True Brace(OTB, K&amp;R 风格):</strong> 在后面这些位置中可以使用 OTB 风格: <a href="../Functions.htm#define">函数定义</a>, <a href="IfExpression.htm">If (expression)</a>, <a href="Else.htm">Else</a>, <a href="Loop.htm">Loop Count</a>, <a href="While.htm">While</a>, <a href="For.htm">For</a>, <a href="Try.htm">Try</a>, <a href="Catch.htm">Catch</a> 和 <a href="Finally.htm">Finally</a>. 这种风格中区块的开括号与区块的控制语句在同一行, 而不是在其下一行. 例如:</p>
<pre>MyFunction(x, y) {
    ...
}
if (x < y) {
    ...
} else {
    ...
}
Loop %RepeatCount% {
    ...
}
While x < y {
    ...
}
For k, v in obj {
    ...
}
Try {
    ...
} Catch e {
    ...
} Finally {
    ....
}</pre>
<p>同样地, 语句可以放在大括号的后面(但不包括 One True Brace 风格的开括号). 例如:</p>
<pre>if (x = 1)
{ MsgBox 这一行出现在左大括号的右边. 只要 IF 语句为真, 它就会执行.
    MsgBox 这是下一行.
} MsgBox 这一行出现在右大括号的右边. 它无条件地执行.</pre>

<h2 id="Related">相关</h2>
<p><a href="../Functions.htm#define">函数定义</a>, <a href="../Language.htm#control-flow">控制流语句</a>, <a href="../Language.htm#if-statement">If 语句</a>, <a href="Else.htm">Else</a>, <a href="../Language.htm#loop-statement">Loop 语句</a>, <a href="Try.htm">Try</a>, <a href="Catch.htm">Catch</a>, <a href="Finally.htm">Finally</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 通过将两个语句 <code>MsgBox, test1</code> 和 <code>Sleep, 5</code> 用大括号括起来, 如果 <var>x</var> 等于 1, If 语句同时执行这两个语句.</p>
<pre>if (x = 1)
{
    MsgBox, test1
    Sleep, 5
}
else
    MsgBox, test2</pre>
</div>

</body>
</html>